1 追蹤者

將 Yii 作為微框架使用

Yii 可以輕鬆地在不使用基本和進階範本所包含的功能下使用。換句話說,Yii 本身就是一個微框架。使用 Yii 並不需要範本所提供的目錄結構。

當您不需要所有預定義的範本代碼(例如資源或視圖)時,這特別方便。其中一種情況是建構 JSON API。以下章節將展示如何做到這一點。

安裝 Yii

為您的專案檔案建立一個目錄,並將工作目錄更改為該路徑。範例中使用的命令是基於 Unix 的,但 Windows 中也存在類似的命令。

mkdir micro-app
cd micro-app

注意: 繼續操作需要一些 Composer 知識。如果您還不知道如何使用 Composer,請花時間閱讀 Composer 指南

使用您最喜歡的編輯器在 micro-app 目錄下建立檔案 composer.json,並新增以下內容

{
    "require": {
        "yiisoft/yii2": "~2.0.0"
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ]
}

儲存檔案並執行 composer install 命令。這將安裝框架及其所有依賴項。

建立專案結構

在您安裝框架之後,現在是時候為應用程式建立一個入口點了。入口點是當您嘗試開啟應用程式時將執行的第一個檔案。基於安全考量,建議將入口點檔案放在一個單獨的目錄中,並使其成為網站根目錄。

建立一個 web 目錄,並將 index.php 放入其中,內容如下

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

$config = require __DIR__ . '/../config.php';
(new yii\web\Application($config))->run();

另外建立一個名為 config.php 的檔案,其中將包含所有應用程式配置

<?php
return [
    'id' => 'micro-app',
    // the basePath of the application will be the `micro-app` directory
    'basePath' => __DIR__,
    // this is where the application will find all controllers
    'controllerNamespace' => 'micro\controllers',
    // set an alias to enable autoloading of classes from the 'micro' namespace
    'aliases' => [
        '@micro' => __DIR__,
    ],
];

資訊: 即使配置可以保留在 index.php 檔案中,也建議將其分開。這樣它也可以用於主控台應用程式,如下所示。

您的專案現在已準備好進行編碼。雖然專案目錄結構由您決定,但只要您遵守命名空間即可。

建立第一個控制器

建立一個 controllers 目錄,並新增檔案 SiteController.php,這是預設控制器,將處理沒有路徑資訊的請求。

<?php

namespace micro\controllers;

use yii\web\Controller;

class SiteController extends Controller
{
    public function actionIndex()
    {
        return 'Hello World!';
    }
}

如果您想為此控制器使用不同的名稱,您可以更改它並相應地配置 yii\base\Application::$defaultRoute。例如,對於 DefaultController,那將是 'defaultRoute' => 'default/index'

此時專案結構應如下所示

micro-app/
├── composer.json
├── config.php
├── web/
    └── index.php
└── controllers/
    └── SiteController.php

如果您尚未設定 Web 伺服器,您可能需要查看 Web 伺服器設定檔範例。另一個選項是使用 yii serve 命令,它將使用 PHP 內建的 Web 伺服器。您可以從 micro-app/ 目錄透過以下方式運行它

vendor/bin/yii serve --docroot=./web

現在在瀏覽器中開啟應用程式 URL 應該會印出「Hello World!」,這是 SiteController::actionIndex() 中返回的。

資訊: 在我們的範例中,我們已將預設應用程式命名空間 app 更改為 micro,以示範您不受該名稱的約束(如果您認為您受約束),然後調整了控制器命名空間並設定了正確的別名。

建立 REST API

為了示範我們「微框架」的用法,我們將為文章建立一個簡單的 REST API。

為了讓此 API 提供一些資料,我們首先需要一個資料庫。將資料庫連線配置新增至應用程式配置

'components' => [
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'sqlite:@micro/database.sqlite',
    ],
],

資訊: 為了簡單起見,我們在這裡使用 sqlite 資料庫。請參閱 資料庫指南 以獲取更多選項。

接下來,我們建立資料庫遷移以建立文章表。請確保您有一個單獨的設定檔,如上所述,我們需要它來運行以下主控台命令。運行以下命令將建立一個資料庫遷移檔案並將遷移應用於資料庫

vendor/bin/yii migrate/create --appconfig=config.php create_post_table --fields="title:string,body:text"
vendor/bin/yii migrate/up --appconfig=config.php

建立目錄 models 和該目錄中的 Post.php 檔案。這是模型的代碼

<?php

namespace micro\models;

use yii\db\ActiveRecord;

class Post extends ActiveRecord
{ 
    public static function tableName()
    {
        return '{{post}}';
    }
}

資訊: 此處建立的模型是一個 ActiveRecord 類別,它表示來自 post 表的資料。請參閱 Active Record 指南 以獲取更多資訊。

為了在我們的 API 上提供文章,請在 controllers 中新增 PostController

<?php

namespace micro\controllers;

use yii\rest\ActiveController;

class PostController extends ActiveController
{
    public $modelClass = 'micro\models\Post';

    public function behaviors()
    {
        // remove rateLimiter which requires an authenticated user to work
        $behaviors = parent::behaviors();
        unset($behaviors['rateLimiter']);
        return $behaviors;
    }
}

此時我們的 API 將提供以下 URL

  • /index.php?r=post - 列出所有文章
  • /index.php?r=post/view&id=1 - 顯示 ID 為 1 的文章
  • /index.php?r=post/create - 建立文章
  • /index.php?r=post/update&id=1 - 更新 ID 為 1 的文章
  • /index.php?r=post/delete&id=1 - 刪除 ID 為 1 的文章

從這裡開始,您可能需要查看以下指南以進一步開發您的應用程式

  • 目前 API 僅理解 urlencoded 表單資料作為輸入,要使其成為真正的 JSON API,您需要配置 yii\web\JsonParser
  • 要使 URL 更友善,您需要配置路由。請參閱 REST 路由指南,了解如何執行此操作。
  • 另請參閱 展望未來 章節以獲取更多參考資料。

發現錯字或您認為此頁面需要改進?
在 GitHub 上編輯 !